# 前言
在之前几个章节中,我们实现了对一个前端镜像的简单部署流程。
可是,我们在部署时,难免会遇到一些要存放机密内容的需求。例如我们的数据库密码,用户名密码,公钥私钥,token 等等机密内容,甚至还有我们 docker 私有库的密码。而这些内容,显然是不能写死在代码里面,更不可能明文挂载进去的。
那么我们有没有什么好的解决方案能够使用呢?这一章我们就来学习 Kubernetes 中的一个概念 —— Secret
# 什么是 Secret
Secret 是 Kubernetes 内的一种资源类型,可以用它来存放一些机密信息(密码,token,密钥等)。信息被存入后,我们可以使用挂载卷的方式挂载进我们的 Pod 内。当然也可以存放docker私有镜像库的登录名和密码,用于拉取私有镜像。

# Secret 的几种类型
在 k8s中,secret 也有多种类型可以配置
# Opaque 类型
第一种是 opaque 类型,这种类型比较常用,一般拿来存放密码,密钥等信息,存储格式为 base64 。但是请注意:base64并不是加密格式,依然可以通过decode来解开它。
例如我们创建一组用户名和密码,用户名为 janlay 和 367734wer 。则可以通过命令 kubectl create secret generic 创建:
kubectl create secret generic default-auth --from-literal=username=janlay \
--from-literal=password=367734qwer
在这里, default-auth 为 自定义的名称,–from-literal 的后面则跟随一组 key=value。当然你也可以按照此格式继续向后拼接你要存储的信息。
- 存储成功后,我们可以通过 kubectl get secret 命令来查看你存储过的 Secret。在这里可以看到,刚刚创建的密钥组合 default-auth 已经展示了出来。
- 在这里, NAME 代表 Secret 的名称;TYPE 代表 Secret 的类型; DATA 是 Secret 内存储内容的数量; AGE 是创建到现在的时间

我们可以通过 kubectl edit secret 命令来编辑 default-auth 的内容,来看看里面到底存了什么内容:
kubectl edit secret default-auth
这里也可以用 kubectl get secret [secret名称] -o yaml 命令,将内容打印到终端上查看。其中 -o yaml 代表输出为 yaml 格式内容,当然也可以输出 json 等格式内容

可以看到,data 字段存放了我们存储的信息 base64 后的结果。但是这种方式是不安全的,我们可以通过解码base64 来获取真实值:
echo MzY3NzM0cXdlcg== | base64 -d
这里可以使用 Linux 自带的 base64 命令进行解码。其中 -d 代表 --decode,解码的意思

解码后,我们可以清晰的看到原始内容。
那么除了通过命令创建,可不可以通过配置文件创建呢?答案是可以的。我们新建一个文件,名称叫 admin-auth.yaml ,输入以下配置:
